package com.zhsj.OkeHomeConsumption.common;

import android.annotation.SuppressLint;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.multidex.MultiDex;
import android.util.Log;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.goyourfly.multi_picture.MultiPictureView;
import com.orhanobut.hawk.Hawk;
import com.orhanobut.hawk.HawkBuilder;
import com.tencent.bugly.crashreport.CrashReport;
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;
import com.zhsj.OkeHomeConsumption.R;
import com.zhsj.OkeHomeConsumption.other.EventBusManager;
import com.hjq.image.ImageLoader;
import com.hjq.toast.ToastUtils;
import com.zhsj.OkeHomeConsumption.ui.activity.HomeActivity;
import com.zhsj.OkeHomeConsumption.ui.activity.MyDefaultErrorActivity;


import org.jetbrains.annotations.NotNull;

import cat.ereza.customactivityoncrash.CustomActivityOnCrash;
import cat.ereza.customactivityoncrash.config.CaocConfig;
import cn.bingoogolapple.swipebacklayout.BGASwipeBackHelper;

/**
 * author : Xingdx
 *
 * time   : 2018/10/18
 * desc   : 项目中的 Application 基类
 */
public class MyApplication extends Application {
    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        initSDK(this);
        mContext = this;
    }

    /**
     * 获取全局的context
     */
    public static Context getContext() {
        return mContext;
    }

    /**
     * 初始化一些第三方框架
     */
    public static void initSDK(Application application) {
        /**
         * 必须在 Application 的 onCreate 方法中执行 BGASwipeBackHelper.init 来初始化滑动返回
         * 第一个参数：应用程序上下文
         * 第二个参数：如果发现滑动返回后立即触摸界面时应用崩溃，请把该界面里比较特殊的 View 的 class 添加到该集合中，目前在库中已经添加了 WebView 和 SurfaceView
         */
        BGASwipeBackHelper.init(application, null);

        // 初始化吐司工具类
        ToastUtils.init(application);

        // 初始化图片加载器
        ImageLoader.init(application);

        // 初始化 EventBus
        EventBusManager.init();

        // 初始化友盟 SDK
        init(application);

        CrashReport.initCrashReport(application, "e3965c7ae3", true);
        //初始化存储工具
        Hawk.init(application).build();
        error();

    }
    /**
     * 初始化友盟相关 SDK
     */
    public static void init(Application application) {


            UMConfigure.init(application, UMConfigure.DEVICE_TYPE_PHONE,"5d79fad3570df3cee80005db");
            // 初始化各个平台的 Key
            UMShareAPI.get(application);
            PlatformConfig.setWeixin("wx50199addaec9e004", "5096785bd5f5658f369f7e2437ea4aa9");


    }
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        // 使用 Dex分包
        MultiDex.install(this);
    }
   @SuppressLint("RestrictedApi")
   private static void error(){
       //整个配置属性，可以设置一个或多个，也可以一个都不设置
       CaocConfig.Builder.create()
               //程序在后台时，发生崩溃的三种处理方式
               //BackgroundMode.BACKGROUND_MODE_SHOW_CUSTOM: //当应用程序处于后台时崩溃，也会启动错误页面，
               //BackgroundMode.BACKGROUND_MODE_CRASH:      //当应用程序处于后台崩溃时显示默认系统错误（一个系统提示的错误对话框），
               //BackgroundMode.BACKGROUND_MODE_SILENT:     //当应用程序处于后台时崩溃，默默地关闭程序！
               .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT)
               .enabled(true)     //false表示对崩溃的拦截阻止。用它来禁用customactivityoncrash框架
               .showErrorDetails(false) //这将隐藏错误活动中的“错误详细信息”按钮，从而隐藏堆栈跟踪,—》针对框架自带程序崩溃后显示的页面有用(DefaultErrorActivity)。。
               .showRestartButton(false)    //是否可以重启页面,针对框架自带程序崩溃后显示的页面有用(DefaultErrorActivity)。
               .trackActivities(true)     //错误页面中显示错误详细信息；针对框架自带程序崩溃后显示的页面有用(DefaultErrorActivity)。
               .minTimeBetweenCrashesMs(2000)      //定义应用程序崩溃之间的最短时间，以确定我们不在崩溃循环中。比如：在规定的时间内再次崩溃，框架将不处理，让系统处理！
               .errorDrawable(R.mipmap.androidicon1)     //崩溃页面显示的图标
               .restartActivity(HomeActivity.class)      //重新启动后的页面
               .errorActivity(MyDefaultErrorActivity.class) //程序崩溃后显示的页面
               .eventListener(new CustomEventListener())//设置监听
               .apply();
       //如果没有任何配置，程序崩溃显示的是默认的设置
//       CustomActivityOnCrash.install(this);
   }

    /**
     * 监听程序崩溃/重启
     */
    private static class CustomEventListener implements CustomActivityOnCrash.EventListener {
        //程序崩溃回调
        @Override
        public void onLaunchErrorActivity() {
            Log.d("huangxiaoguo", "程序崩溃回调");
        }

        //重启程序时回调
        @Override
        public void onRestartAppFromErrorActivity() {
            Log.d("huangxiaoguo", "重启程序时回调");
        }

        @Override
        public void onCloseAppFromErrorActivity() {

        }
    }

}